package cn.demoncat.util.pay.ceb.entity;

import lombok.Data;

import java.util.ArrayList;
import java.util.List;

/**
 * 光大银行-请求参数-会员账户管理
 * 
 * @author 延晓磊
 * @since 2022年02月22日
 */
@Data
public class MemberManageRequestParam {
    
     // 操作类型：0增，1改，2删
     private String optType;
     // 会员编号（新增时为空）
     private String memNum;
     // 会员名称，与绑定的户名一致
     private String memName;
     // 会员在商户的唯一标识
     private String regisName;
     // 统一社会信用代码
     private String identiNum;
     // 法人姓名
     private String legalName;
     // 法人身份证号
     private String legalIdCard;
     // 绑定的银行实体账户
     private List<Account> accounts;

    /**
     * 构建 - 添加
     *
     * @return
     */
    public static MemberManageRequestParam buildSave(){
        MemberManageRequestParam param = new MemberManageRequestParam();
        param.setOptType("0");
        param.setAccounts(new ArrayList<>());
        return param;
    }

    /**
     * 构建 - 修改
     *
     * @param memNum 会员编号
     * @return
     */
    public static MemberManageRequestParam buildUpdate(String memNum){
        MemberManageRequestParam param = new MemberManageRequestParam();
        param.setOptType("1");
        param.setMemNum(memNum);
        param.setAccounts(new ArrayList<>());
        return param;
    }

    /**
     * 构建 - 删除
     *
     * @param memNum 会员编号（编号以外的其它参数实际上无效）
     * @return
     */
    public static MemberManageRequestParam buildDelete(String memNum){
        MemberManageRequestParam param = new MemberManageRequestParam();
        param.setOptType("2");
        param.setMemNum(memNum);
        return param;
    }

    /**
     * 账户-添加，修改
     *
     * @param account
     * @return
     */
    public MemberManageRequestParam addAccount(Account account){
        this.getAccounts().add(account);
        return this;
    }

    /**
     * 绑定的银行实体账户
     */
    @Data
    public static class Account{

        // 操作类型：0增，1改，2删
        private String opeAccType;
        // 开户行（总行）
        private String bindOpenBank;
        // 开户联行行号（大行=总行，小行=支行）
        private String bindOpenOrgNum;
        // 开户行全称（支行）
        private String bindOpenBankName;
        // 账号
        private String bindAccNum;
        // 户名，与会员名称一致
        private String bindAccName;

        /**
         * 构建 - 添加
         *
         * @return
         */
        public static Account buildSave(){
            Account param = new Account();
            param.setOpeAccType("0");
            return param;
        }

        /**
         * 构建 - 修改
         *
         * @return
         */
        public static Account buildUpdate(){
            Account param = new Account();
            param.setOpeAccType("1");
            return param;
        }

        /**
         * 构建 - 删除
         *
         * @return
         */
        public static Account buildDelete(){
            Account param = new Account();
            param.setOpeAccType("2");
            return param;
        }
    }
}
